package enumAndAnnotation;

/**
 * Enum类常用方法
 *
 * public abstract class Enum<T><E extends Enum<E>>
 *     implements Comparable<E>, Serializable{
 *
 *     }
 */
public class EnumMethod {

    public static void main(String[] args) {

        //使用 enum 关键字时，会隐式继承 Enum类，这样就可以使用 Enum类 相关的方法
        /*
            enum 常用方法使用
            1)toString:Enum类已经重写过了，返回的是当前对象名,子类可以重写该方法，用于返回对象的属性信息
            2)name：返回当前对象名（常量名），子类中不能重写
            3)ordinal：返回当前对象的位置号，默认从0开始
            4)values：返回当前枚举类中所有的常量
            5)valueOf：将字符串转换成枚举对象，要求字符串必须为已有的常量名，否则报异常！
            6)compareTo：比较两个枚举常量，比较的就是编号！
         */

        //使用Season2枚举类，演示各种方法
        Season2 autumn = Season2.AUTUMN;

        //输出枚举对象的名字
        System.out.println(autumn.name());//AUTUMN

        //ordinal()输出的是该枚举对象的次序/编号，从0开始编号
        //AUTUMN是第三个，所以输出2
        System.out.println(autumn.ordinal());//2

        // values 方法，返回Season2[]，含有定义的所有枚举对象
        Season2[] values = Season2.values();
        System.out.println("====遍历取出枚举对象====");
        for (Season2 season : values) {
            System.out.println(season);
        }

        //valueOf:将字符串转换成枚举对象，要求字符串必须为已有的常量名，否则报异常
        Season2 autumn1 = Season2.valueOf("AUTUMN");
        System.out.println("autumn1 = " + autumn1);
        System.out.println(autumn == autumn1);

        //compareTo:比较两个枚举常量，比较的就是编号
        //Season2.AUTUMN的编号 - Season2.SUMMER的编号
        System.out.println(Season2.AUTUMN.compareTo(Season2.SUMMER));


    }
}
